/**
 *  @ author 谭
 *  入口启动函数
 */

"use strict";

/*
    端口
 */
const post = 8913;

/*
    导入express框架
 */
const express = require('express');

/*
    解决跨域
 */

const cors = require('cors');

/*
    后端验证
 */
const Joi = require('joi');

/*
    JWT认证
 */
const expressjwt = require('express-jwt');

/*
    文件上传
 */
const multer = require('multer');



/*
    文件上传路径
 */

var upload = multer({ dest: './public' });


const app = express();


/*
    处理静态资源
 */
app.use('/public',express.static('./public'));
app.use(upload.any());

/*
    解析json数据的格式
 */
app.use(express.json());

/*
    跨域
 */
app.use(cors());

/*
    解析URL_encoded 格式的数据
 */
app.use(express.urlencoded({ extended: false}));

/*
    导入secret密钥
 */
const secret = require('./schema/secret')

/*
    访问路径放行
 */
app.use(expressjwt({secret: secret,algorithms: ['HS256']}).unless({path: [/^\/user\/|\/public/]}));

/*
    用户访问路由处理
 */
const user = require('./router/user/user');
app.use('/user',user);

/*
    书模块
 */
const books = require('./router/books/books');
app.use('/books',books);

/*
    全局错误组件间
 */
app.use(function (err, req, res, next) {
    // 后端参数校验失败
    if (err instanceof Joi.ValidationError) {
        return res.send({
            status: 1,
            message: err.message
        });
    }
    // JWT身份认证失败
    if (err.name === 'UnauthorizedError') { //
        return res.send({
            status: 1,
            message: '请先登录'
        });
    }
    // 未知错误
    res.send({
        status: 1,
        message: err.message
    });
})

app.listen(post, () => {
    console.log('express server run http://127.0.0.1:8913')
});


